home *** CD-ROM | disk | FTP | other *** search
- Program lzhview;
-
- Uses
- Dos, Crt;
-
- Const
- BSize = 4096; { I/O Buffer Size }
-
- Type LZHHead = Record
- HSize : Byte;
- Fill1 : Byte;
- Method : Array[1..5] of Char;
- CompSize : LongInt;
- UCompSize : LongInt;
- Dos_DT : LongInt;
- Fill2 : Word;
- FileNameLen: Byte;
- FileName : Array[1..12] of Char;
- end;
-
- Var LZH1 : LZHHead;
- DT : DateTime;
- FSize,L,C : LongInt;
- F : File;
- BUFF : Array[1..BSize] of Byte;
- DATE : String[8]; { formatted date as YY/MM/DD }
- TIME : String[6]; { " time as HH:MM }
- RES : Word;
- DIR : DirStr;
- FNAME : NameStr;
- EXT : ExtStr;
- LZHString,
- SName : String;
- QUIT : Boolean;
- SW : Pointer;
-
- Function upper(st:String):String;
- Var i : Integer;
- begin
- For i := 1 to length(st) do st[i] :=upcase(st[i]);
- upper := st;
- end;
-
- Function ord_to_str(i:LongInt;j:Byte):String;
- Var c:String;
- begin
- str(i,c);
- While length(c)<j do c:=' '+c;
- ord_to_str:=c;
- end;
-
- Procedure FDT(LI:LongInt); { Format Date/Time (time With AM PM) fields }
- Var t_ext : String;
- begin
- UnPackTime (LI,DT);
- DATE := ord_to_str(DT.Month,2)+'/'+ord_to_str(DT.Day,2)+'/'
- +ord_to_str(DT.Year mod 100,2);
- if DATE[1] = ' ' then DATE[1] := '0';
- if DATE[4] = ' ' then DATE[4] := '0';
- if DATE[7] = ' ' then DATE[7] := '0';
- if DT.Hour in [0..11] then t_ext:='a' else t_ext:='p';
- if DT.Hour in [13..24] then Dec(DT.Hour,12);
- TIME := ord_to_str(DT.Hour,2)+':'+ord_to_str(DT.Min,2);
- if TIME[1] = ' ' then TIME[1] := '0';
- if TIME[4] = ' ' then TIME[4] := '0';
- TIME:=TIME+t_ext;
- end; { FDT }
-
- Procedure GET_LZH_ENTRY;
- begin
- FillChar(LZH1,SizeOf(LZHHead),#0);
- FillChar (DT,SizeOf(DT),#0);
- L := SizeOf(LZHHead);
- Seek (F,C); BlockRead (F,BUFF,L,RES);
- Move (BUFF[1],LZH1,L);
- With LZH1 do
- if HSize > 0 then
- begin
- Move (FileNameLen,SNAME,FileNameLen+1);
- UnPackTime (Dos_DT,DT);
- FSize := CompSize
- end
- else QUIT := True
- end; { GET_LZH_ENTRY }
-
- Procedure DO_LZH (FN : String);
- Var fnstr, LZHMeth : String;
- fls,totu,totc : LongInt;
- begin
- totu:=0; totc:=0; fls:=0;
- Assign (F,FN);
- {$I-} Reset (F,1); {$I+}
- if Ioresult<>0 then
- begin
- Writeln(upper(FN)+' not found');
- Exit;
- end;
- FSize := FileSize(F);
- C := 0;
- QUIT := False;
- Writeln('LZH File : '+upper(FN));
- Writeln;
- Writeln(' Filename OrigSize CompSize Method Date '
- +' Time');
- Writeln('------------ -------- -------- -------- --------'
- +' ------');
- Repeat
- GET_LZH_ENTRY;
- if not QUIT then
- begin
- FSplit (SNAME,DIR,FNAME,EXT);
- fnstr:=FNAME+EXT;
- While length(fnstr)<12 do insert(' ',fnstr,length(fnstr)+1);
- FDT(LZH1.Dos_DT);
- inc(totu,lzh1.ucompsize);
- inc(totc,lzh1.compsize);
- inc(fls,1);
- Case LZH1.Method[4] of {normally only 0,1 or 5}
- '0' : LZHMeth:='Stored ';
- '1' : LZHMeth:='Frozen 1';
- '2' : LZHMeth:='Frozen 2';
- '3' : LZHMeth:='Frozen 3';
- '4' : LZHMeth:='Frozen 4';
- '5' : LZHMeth:='Frozen 5';
- else LZHMeth:=' Unknown';
- end;
- LZHString:=Fnstr+' '+ord_to_str(LZH1.UCompsize,8)+' '+
- ord_to_str(LZH1.Compsize,8)+' '+lzhmeth+' '
- +DATE+' '+TIME;
- Writeln(LZHString);
- end;
- Inc (C,FSize+LZH1.HSize+2)
- Until QUIT;
- Close (F);
- Writeln('------------ -------- -------- -------- --------'
- +' -----');
- Writeln(ord_to_str(fls,5)+' Files '+ord_to_str(totu,8)+' '
- +ord_to_str(totc,8));
- end; { DO_LZH }
-
- begin
- ClrScr;
- do_lzh('whatever.lzh'); { <-- place Filename here }
- end.
-
- {
- Note the changes in the date processing and compression method display.
- Thanks again For the code.
- }